package djboom.materials.display.page {
	import djboom.materials.display.elements.NavigationItem;
	import djboom.materials.events.PageEvent;

	import org.casalib.display.CasaSprite;

	import flash.events.Event;

	/**
	 * Содержание.
	 * <br>
	 * 
	 * @author DJ BooM 
	 * @since 06.04.2010
	 * 
	 */

	public class Navigation extends Page {

		// ----------------------------------------------------------------------------
		// Константы класса.
		// ----------------------------------------------------------------------------

		public static var NAVIGATION_XML:XML = <items>
        <item page={Page.INFORMATION} title="Общие сведения" enable="true" />
        <item page={Page.TASKS} title="Цель и задачи лабораторной работы" enable="true" />
        <item page={Page.CONCEPTS} title="Понятие средней, истинной плотности и пористости" enable="true" />
        <item page={Page.TEST} title="Допуск к работе" enable="true" />
        <item page={Page.WORK_1_PAGE_1} title="Определение средней плотности на образцах правильной геометрической формы" enable="false" />
        <item page={Page.WORK_2_PAGE_1} title="Определение средней плотности на образцах неправильной геометрической формы" enable="false" />
        <item page={Page.WORK_3_PAGE_1} title="Определение истинной плотности" enable="false" />
        <item page={Page.CONCLUSION} title="Заключение" enable="false" />
        <item page={Page.LITERATURE} title="Список рекомендованной литературы" enable="true" />
        </items>;

		// ----------------------------------------------------------------------------
		// Свойства класса.
		// ----------------------------------------------------------------------------

		private var _navigationList:XMLList;
		private var _navigation:CasaSprite;

		// ----------------------------------------------------------------------------
		// Конструктор.
		// ----------------------------------------------------------------------------

		public function Navigation() {
			super();
		}	 

		// ----------------------------------------------------------------------------
		// Методы класса.
		// ----------------------------------------------------------------------------

		private function changePage(event:PageEvent):void {
			var pageEvent:PageEvent = new PageEvent(PageEvent.CHANGE);
			pageEvent.pageName = event.pageName;            
			dispatchEvent(pageEvent);
		}

		// ----------------------------------------------------------------------------
		// Публичные методы.
		// ----------------------------------------------------------------------------

		override public function init():void {
			// Создаем заголовок страницы.
			createTitlePage("Содержание");
			
			_navigationList = NAVIGATION_XML.child("item");
			
			_navigation = new CasaSprite();
			_navigation.x = 58;			_navigation.y = 99;
			addChild(_navigation);
			
			for each (var navigationItemXML:XML in _navigationList) {
				var page:String = navigationItemXML.attribute("page").toString();				var title:String = navigationItemXML.attribute("title").toString();				var enable:Boolean = navigationItemXML.attribute("enable").toString() == "true" ? true : false;
				
				var navigationItem:NavigationItem = new NavigationItem(page, title, enable);
				navigationItem.y = navigationItemXML.childIndex() * 36;
				navigationItem.addEventListener(PageEvent.CHANGE, changePage);
				_navigation.addChild(navigationItem);
			}
		}

		override protected function clearPage(event:Event):void {
            super.clearPage(event);
			
			while (_navigation.numChildren) {
				var navigationItem:NavigationItem = _navigation.getChildAt(0) as NavigationItem;
                
				navigationItem.destroy();
				navigationItem = null;
			}
			
			_navigation.destroy();
			_navigation = null;
			
			_navigationList = null;
		}

		public static function toggleEnabled(pageName:String, enabled:Boolean):void {
			var work1XML:XMLList = NAVIGATION_XML.child("item").(@page == pageName);
            
			for each (var node:XML in work1XML) {
				var page:String = work1XML.attribute("page").toString();
				var title:String = work1XML.attribute("title").toString();
                
                var navigationXML_NEW:XML = enabled ? <item page={page} title={title} enable="true" /> : <item page={page} title={title} enable="false" />;
                
				NAVIGATION_XML.replace(node.childIndex(), navigationXML_NEW);
			}
		}
        
		// ----------------------------------------------------------------------------
        // Публичные свойства.
        // ----------------------------------------------------------------------------
	}
}
